package clases;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author MK
 */
public class ClsException {
    private static String direccionException=null;
    private static String nombreArchivoException=null;
    private static String nombreCarpeta_GuardaArchivo="erroresPrograma";
    private static String extencionDelArchivo=".txt";
    public static boolean escribirFileBool=false;
    private ClsDatabase bd = new ClsDatabase();

    public ClsException(){
        SePuedeEscribir();
    }

    //___________________________________________________________________________________ Soy una barra separadora :)
    public static void _exceptionWriteFile(java.lang.Throwable e){
        mensajeError_Programador();
        if (escribirFileBool) {
            direccionException=System.getProperty("user.dir")+"//"+nombreCarpeta_GuardaArchivo+"//";
            FileWriter fstream = null;
    //        System.out.println("_exceptionWriteFile");
            try {
                String fileName="error-"+ClsMetodos._getFechaActual()+extencionDelArchivo;
                if (nombreArchivoException!=null) {
                    fileName=nombreArchivoException;
                }
                File file=new File(direccionException);
                if (!file.exists()) {
                    file.mkdirs();
                 }
                String dirFile=direccionException+fileName;

                //Para que no lo sobre escriba
                //http://mx.answers.yahoo.com/question/index?qid=20100710102910AAoZ4t0
                fstream = new FileWriter(dirFile,true);
                BufferedWriter out=new BufferedWriter(fstream);
    //            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(dirFile), true), "UTF8"));
                out.write("-----------------------------------------------------------------------------\n");
                out.write("--->["+e.getClass().getName()+"] "+ClsMetodos._getFechaHoraActual()+"\n");
                out.write(e.toString()+"\n");
                out.write("-----------------------------------------------------------------------------\n");
                out.close();
            } catch (IOException ex) {
                Logger.getLogger(ClsMetodos.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    fstream.close();
                } catch (IOException ex) {
                    Logger.getLogger(ClsMetodos.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
    
    public static void _exceptionWriteFile(java.lang.Throwable e,String NombreMetodoOcurrencia){
        mensajeError_Programador();
        if (escribirFileBool) {
            direccionException=System.getProperty("user.dir")+"//"+nombreCarpeta_GuardaArchivo+"//";
            FileWriter fstream = null;
            try {
                String fileName="error-"+ClsMetodos._getFechaActual()+extencionDelArchivo;
                if (nombreArchivoException!=null) {
                    fileName=nombreArchivoException;
                }
                File file=new File(direccionException);
                if (!file.exists()) {
                    file.mkdirs();
                 }
                String dirFile=direccionException+fileName;

                //Para que no lo sobre escriba
                //http://mx.answers.yahoo.com/question/index?qid=20100710102910AAoZ4t0
                fstream = new FileWriter(dirFile,true);
                BufferedWriter out=new BufferedWriter(fstream);
    //            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(dirFile), true), "UTF8"));
                out.write("-----------------------------------------------------------------------------\n");
                out.write("--->[Metodo:"+NombreMetodoOcurrencia+"]-["+e.getClass().getName()+"] "+ClsMetodos._getFechaHoraActual()+"\n");
                out.write(e.toString()+"\n");
                out.write("-----------------------------------------------------------------------------\n");
                out.close();
            } catch (IOException ex) {
                Logger.getLogger(ClsMetodos.class.getName()).log(Level.SEVERE, null, ex);           
            } finally {
                try {
                    fstream.close();
                } catch (IOException ex) {
                    Logger.getLogger(ClsMetodos.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }

    public void SePuedeEscribir(){
        Object[][] datos=bd.select("parametros", "autosave", null);
        if (datos!=null) {
            if (datos[0][0].equals("1")) {
                escribirFileBool = true;
//                return true;
            }
        }
        escribirFileBool = false;
//        return false;
    }
    
    public static void mensajeError_Programador(){
        javax.swing.JOptionPane.showMessageDialog(null, "OCURRIO UN ERROR UN PROBLEMA");
        //javax.swing.JOptionPane.showMessageDialog(null, "OCURRIO UN ERROR \n SI NO ERES PROGRAMADOR \n COMUNICATE CON EL PARA QUE LO SOLUCIONE...\n (Mirar la consola...)");
    }
}